home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / t_os / artemis / artsrc1 / arealist.c next >
Encoding:
C/C++ Source or Header  |  1993-11-30  |  1.6 KB  |  85 lines

  1. /*
  2.     ARTemis (Graphic Editor for FM-TOWNS)      (c) MATSUUCHI Ryosuke 1992,1993
  3.  
  4.     arealist.c
  5.         領域リストを管理するモジュール (objectively designed)
  6.  
  7.     ALnew                    Arealist を生成する
  8.     ALdelete(al)            Arealist を消滅させる
  9.     ALaddarea(al,area)        Arealist 内のリストに Area を追加する
  10.     ALdeletearea(al)        最後に追加した Area を削除する
  11.     ALgetfirstarea(al)        Arealist 内のリストの先頭の Area を得る
  12.     ALgetnextarea(al)        リスト内の次の Area を得る
  13. */
  14.  
  15. #include <stdio.h>
  16. #include <malloc.h>
  17. #include "arealist.h"
  18.  
  19. Arealist *ALnew()
  20. {
  21.     Arealist *al;
  22.     if ((al = malloc(sizeof(Arealist))) == NULL)
  23.         return NULL;
  24.     al->arealist = NULL;
  25.     al->curarea = NULL;
  26.     return al;
  27. }
  28.  
  29. void ALdelete(Arealist *al)
  30. {
  31.     if (al == NULL)
  32.         return;
  33.     Area *p,*t;
  34.     for (p=al->arealist,t=p->next; p!=NULL; p=t,t=(t==NULL?NULL:t->next))
  35.         free(p);
  36.     free(al);
  37. }
  38.  
  39. Area *ALaddarea(Arealist *al, Area *area)
  40. {
  41.     Area *new;
  42.     if ((new = malloc(sizeof(Area))) == NULL)
  43.         return NULL;
  44.     *new = *area;
  45.     new->next = al->arealist;
  46.     al->arealist = new;
  47.     return new;
  48. }
  49.  
  50. void ALdeletearea(Arealist *al)
  51. {
  52.     if (al->arealist == NULL)
  53.         return;
  54.     Area *t;
  55.     t = al->arealist;
  56.     al->arealist = al->arealist->next;
  57.     free(t);
  58. }
  59.  
  60. Area *ALgetfirstarea(Arealist *al)
  61. {
  62.     al->curarea = al->arealist;
  63.     return al->curarea;
  64. }
  65.  
  66. Area *ALgetnextarea(Arealist *al)
  67. {
  68.     if (al->curarea == NULL)
  69.         return NULL;
  70.     al->curarea = al->curarea->next;
  71.     return al->curarea;
  72. }
  73.  
  74. void ALarea_setdata(Area *area, void *data)
  75. {
  76.     area->data = data;
  77. }
  78.  
  79. void *ALarea_getdata(Area *area)
  80. {
  81.     return area->data;
  82. }
  83.  
  84. /* end of arealist.c */
  85.